

//匿名函数:没有名字的函数
//有名字的函数
def func1(x: Int) = x * 3
//没有名字的函数
(y: Int) => y * 3
//调用
func1(3);
//使用map获得数组元素然后调用匿名函数  得到一个新数组 Array(3, 6, 9)
Array(1, 2, 3).map((y: Int) => y * 3)
//  ||
//  ||  简写
//  V
Array(1, 2, 3).map(_ * 3).map(_ * 3)


val numbers = Array(1, 2, 3, 4, 5, 6, 7, 8)
//对集合的没个元素进行操作,不返回结果
numbers.foreach((x: Int) => x * 2)
//对集合的没个元素进行操作,返回结果
numbers.map(_ * 2)
//过滤集合,得到可以被2整除的元素,过滤的3中写法
numbers.filter(_ % 2 == 0)
numbers.filter((x: Int) => x % 2 == 0)
numbers.filter((x: Int) => {
  if (x % 2 == 0) {
    true
  } else {
    false
  }
})








//普通函数
def myFunc(name: String): String = "hello world " + name
//定义一个高阶函数,对数字10进行某种运算
def someAction(f: (Double) => Double) = f(10)
//测试开平方 sqrt
import scala.math.sqrt
//def sqrt(x:Double):Double
//相当于对数字10进行了开平方的操作
someAction(sqrt)
//定义一个普通函数
def func1(x: Int, y: Int) = {
  x + y + 123
}
//定义一个高阶函数
def func2(f: (Int, Int) => Int, x: Int, y: Int) = f(x, y) + 1
//调用高阶函数
//也就是说:只要满足接受两个Int类型的名称,并且返回值也是INT类型的
//就可以作为f的值
func2(func1, 1, 2)


//zip 合并集合
numbers.zip(Array(1, 2, 3))


//分区partition
numbers.partition(_ % 2 == 0)


numbers.partition((x: Int) => x % 2 == 0)._1
numbers.partition((x: Int) => x % 2 == 0)._2



//查找第一个满足条件的元素
numbers.find(_ % 3 == 0)

numbers.zip(Array(1, 2, 3))
//展开集合,返回一个集合
List(List(1, 2, 3), List(4, 5, 6)).flatten

//展开集合并且操作展开后的每一个元素
val myList = List(List(1, 2, 3), List(4, 5, 6))
myList.flatMap(x => x.map(_ * 2))

//柯里化
def add(x:Int)(y:Int)=x*y
add(6)(7)












